package org.yangjie;

import java.util.Calendar;
import java.util.Date;

/**
 * 日历工具类
 * 用于获取指定时间的日期
 * @author YangJie [2019年4月29日]
 */
public class CalendarUtil {	
	
	/**
	 * 今天日期
	 * @return
	 */
	public static String today() {
		return DateUtil.formatDate(new Date());
	}
	
	/**
	 * 昨天日期
	 * @return
	 */
	public static String yesterday() {
		return DateUtil.formatDate(changeDay(-1, new Date()));
	}
	
	/**
	 * 改变日期
	 * @return
	 */
	public static Date changeDay(int n, Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.DATE, n);
		return calendar.getTime();
	}
	
	/**
	 * 下一天
	 * @param date
	 * @return
	 */
	public static String nextDay(String date) {
		return nextDay(DateUtil.parseDate(date));
	}
	
	/**
	 * 下一天
	 * @param date
	 * @return
	 */
	public static String nextDay(Date date) {
		return nextDay(1, date);
	}
	
	/**
	 * 下n天
	 * @param n
	 * @param date
	 * @return
	 */
	public static String nextDay(int n, String date) {
		return nextDay(n, DateUtil.parseDate(date));
	}
	
	/**
	 * 下n天
	 * @param n
	 * @param date
	 * @return
	 */
	public static String nextDay(int n, Date date) {
		return DateUtil.formatDate(changeDay(n, date));
	}
	
	/**
	 * 前一天
	 * @param date
	 * @return
	 */
	public static String prevDay(String date) {
		return prevDay(DateUtil.parseDate(date));
	}
	
	/**
	 * 前一天
	 * @param date
	 * @return
	 */
	public static String prevDay(Date date) {
		return prevDay(1, date);
	}
	
	/**
	 * 前n天
	 * @param n
	 * @param date
	 * @return
	 */
	public static String prevDay(int n, String date) {
		return prevDay(n, DateUtil.parseDate(date));
	}
	
	/**
	 * 前n天
	 * @param n
	 * @param date
	 * @return
	 */
	public static String prevDay(int n, Date date) {
		return DateUtil.formatDate(changeDay(-n, date));
	}
	

	/**
	 * 改变月份
	 * @return
	 */
	public static Date changeMonth(int n, Date month) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(month);
		calendar.add(Calendar.MONTH, n);
		return calendar.getTime();
	}
	
	/**
	 * 下一月
	 * @param date
	 * @return
	 */
	public static String nextMonth(String month) {
		return DateUtil.formatMonth(changeMonth(1, DateUtil.parseMonth(month)));
	}
	
	/**
	 * 下n月
	 * @param date
	 * @return
	 */
	public static String nextMonth(int n, String month) {
		return DateUtil.formatMonth(changeMonth(n, DateUtil.parseMonth(month)));
	}
	
	/**
	 * 上一月
	 * @param date
	 * @return
	 */
	public static String prevMonth(String month) {
		return DateUtil.formatMonth(changeMonth(-1, DateUtil.parseMonth(month)));
	}
	
	/**
	 * 上一月
	 * @param date
	 * @return
	 */
	public static String prevMonth(int n, String month) {
		return DateUtil.formatMonth(changeMonth(-n, DateUtil.parseMonth(month)));
	}

	/**
	 * 两个日期相差天数
	 * @param begin
	 * @param end
	 * @return
	 */
	public static int diffDay(String begin, String end) {
		long beginTime = DateUtil.parseDate(begin).getTime();
		long endTime = DateUtil.parseDate(end).getTime();
		return (int) ((endTime - beginTime) / 1000 / 60 / 60 / 24);
	}
	
}